/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package EntidadesController;

/**
 *
 * @author fernando
 */
import Criptografia.BlowFish;
import java.sql.*;
import javax.faces.application.NavigationHandler;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

public class Usuario {

    private String grupo;
    private String senha;
    private String login;
    private SQLException erro = new SQLException();
    static Connection conexao = null;
    static Statement estado = null;
    static ResultSet rs;
    private String cript;
    private boolean render = false;

    public boolean isRender() {
        return render;
    }

    public void setRender(boolean render) {
        this.render = render;
    }

    public Usuario() {
        conexao = new Conexao().Acesso();
    }

    public String inserir() throws SQLException {
        String result_inserir = "failure";
        try {
            estado = conexao.createStatement();
            estado.execute("INSERT INTO Usuario(usrlogin,senha,grupo_grupo) VALUES ('" + login + "','"
                    + senha + "','" + grupo + "')");
            estado.close();
            result_inserir = "success";
        } catch (SQLException e) {
            this.erro = e;
            estado.execute("ROLLBACK");
            estado.close();
            result_inserir = "failure";
        }
        System.out.println("usuer " + result_inserir);
        return result_inserir;
    }

    public void gurdaObjeto(String grupo, String login) {

        Docente docente;
        Discente discente;

        if (grupo.equalsIgnoreCase("Docente")) {
            docente = new Docente();
            docente.setUsuario_login(login);
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("docente", docente);
        } else if (grupo.equalsIgnoreCase("Discente")) {
            discente = new Discente();
            discente.setUsuario_usrlogin(login);
            FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("discente", discente);
        }
    }

    public String validar() throws SQLException {
        
        String result_busca = "failure";
        try {
            estado = conexao.createStatement();
            rs = estado.executeQuery("SELECT * FROM usuario WHERE usrlogin = '" + login + "'");
            if (rs.next()) {
                if ((senha).equals(rs.getString(2))) {
                    grupo = rs.getString(3);
                    result_busca = grupo;

                    FacesContext.getCurrentInstance().getExternalContext().getSession(true);
                    FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("currentUser", this);
                    this.gurdaObjeto(grupo, login);
                    this.render = false;
                    return result_busca;
                }
                else{this.render = true;}
            }
            rs.close();
            estado.close();
        } catch (SQLException e) {
            this.erro = e;
            this.render = true;
            estado.close();
            result_busca = "failure";
        }
        return result_busca;
    }

    public void logout() {
        //pego a minha sessão atual
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);

        //pego o objeto de sessão para depois torná-lo nulo
        Object os = (Object) session.getAttribute("currentUser");
        os = null;

        //pego uma instancia do FacesContext para buscar nela o meu ManagedBean de usuário para setar meu objeto global
        FacesContext facesContext = FacesContext.getCurrentInstance();
        // ProfessorController professorC = (ProfessorController) facesContext.getApplication().getVariableResolver().resolveVariable(facesContext, "professorController");
        // professorC.setProfessor(new Professor());

        //seto o meu objeto de sessão nulo na sessão
        session.setAttribute("currentUser", os);

        //invalido a minha session
        session.invalidate();

        //pego a instancia do navigationHandler para chamar manualmente a navegação para o login do sistema
        NavigationHandler navigationHandler = facesContext.getApplication().getNavigationHandler();
        navigationHandler.handleNavigation(facesContext, null, "professor_voltaLogin");

    }

        public void logoutMobile() {
        //pego a minha sessão atual
        HttpSession session = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);

        //pego o objeto de sessão para depois torná-lo nulo
        Object os = (Object) session.getAttribute("currentUser");
        os = null;

        //pego uma instancia do FacesContext para buscar nela o meu ManagedBean de usuário para setar meu objeto global
        FacesContext facesContext = FacesContext.getCurrentInstance();
        // ProfessorController professorC = (ProfessorController) facesContext.getApplication().getVariableResolver().resolveVariable(facesContext, "professorController");
        // professorC.setProfessor(new Professor());

        //seto o meu objeto de sessão nulo na sessão
        session.setAttribute("currentUser", os);

        //invalido a minha session
        session.invalidate();

        //pego a instancia do navigationHandler para chamar manualmente a navegação para o login do sistema
        NavigationHandler navigationHandler = facesContext.getApplication().getNavigationHandler();
        navigationHandler.handleNavigation(facesContext, null, "logoutMobile");

    }

    /*public static void main(String[] args) throws SQLException {
    // TODO code application logic here
    //Grupo b = new Grupo("dow");
    //b.Acesso();
    //b.inserir();
    //Usuario a = new Usuario("dow","323","powrra");
    //a.Acesso();
    //a.inserir();
    Usuario a = new Usuario();
    a.setGrupo("docente");
    a.setLogin("carlaaq");
    a.setSenha("12345");
    a.inserir();
    a.setLogin("carlaaq");
    a.setSenha("12345");
    System.out.println(a.validar());
    a.setLogin("fernando");
    a.setSenha("123");
    System.out.println(a.validar());
    a.setLogin("fendo");
    a.setSenha("123");
    System.out.println(a.validar());
    }*/
    public String getErro() {
        return erro.getMessage();
    }

    public String getGrupo() {
        return grupo;
    }

    public void setGrupo(String grupo) {
        this.grupo = grupo;
    }

    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getSenha() {
        return senha;
    }

    public void setSenha(String senha) {
        if(!login.equalsIgnoreCase("jhielson")&&!login.equalsIgnoreCase("mohonda")&&!login.equalsIgnoreCase("thay")&&!login.equalsIgnoreCase("maeli")){
        senha = senha.toLowerCase();
        cript = BlowFish.cript(senha, login);
        this.senha = cript;
        }
        else{ this.senha = senha;}
    }
}
